#Others# GoLand + DevCloud 的远程开发与调试

#Others# GoLand + DevCloud 的远程开发与调试

  • GoLand as IDE
  • DevCloud as go run/go build/dlv debug environment

前言

缘起一个 EOF 错误,由于网络策略原因,本地开发机无法连接某个内网服务,遂转向在办公网内的远程服务器。本人作为 Linux 小菜,由此产生了一个新诉求:在 Windows 上远程开发和调试服务器的代码,充分地发挥 IDE 的强大作用。

环境准备

本地环境

  1. GoLand 2020.2.3

远程环境

  1. Go 1.16.6
  2. Delve 1.7.0

配置 GoLand 连接 DevCloud

创建 Deployment 配置

Tools -> Deployment -> Configuration -> +

创建 Deployment 配置

Connection - 网络连接

  • Type:选择 SFTP 协议
  • SSH configuration:填写 Host / Port / User name / Password 信息,通过 Test Connection 验证
  • Root path:点击 Autodetect 按钮
  • Web server URL:暂时不用考虑

配置 Connection 选项

Mappings - 存储映射

  • Local path:本地开发机项目目录

  • Deployment path:远程服务器项目目录

  • Web path:暂时不用考虑

配置 Mappings 选项

创建 Run/Debug 配置

Run -> Edit Configurations -> + -> Go Remote

创建 Run/Debug 配置

  • Host:远程服务器地址

  • Port:Delve Port

配置 Go Remote 选项

登录、查看和同步

登录远程服务器

Tool -> Start SSH Session

创建 SSH 会话

查看远程目录树

Tools -> Deployment -> Browse Remote Host

查看 Remote Host 目录

同步本地文件夹

手动Tools -> Deployment -> Sync with Deployed to DevCloud

自动Tools -> Deployment -> Automatic Upload (on explicit save)

手动 or 自动 Sync

部署与调试

远程执行部署脚本

编译调试一起

1
dlv debug cmd/server/main.go --headless --listen=:2345 --api-version=2

先编译再调试

1
2
go build -o cmd/server/demo.exe cmd/server/main.go
dlv --listen=:2345 --headless=true --api-version=2 exec cmd/server/demo.exe

进程后台操作

1
2
nohup dlv debug cmd/server/main.go --headless --listen=:2345 --api-version=2 >> ./demo.log 2>&1 & # 后台启动
pkill -9 dlv # 后台暂停

完整脚本文件

  • start.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash

    # set go env
    export GO111MODULE=auto
    export GOPROXY=https://goproxy.io,direct
    go mod tidy
    go mod vendor

    # kill processes already started
    pkill -9 dlv

    # run demo backgroud server
    nohup dlv debug cmd/server/main.go --headless --listen=:2345 --api-version=2 >> ./demo.log 2>&1 &
    echo 'nohup dlv debug cmd/server/main.go --headless --listen=:2345 --api-version=2 >> ./demo.log 2>&1 &'
  • stop.sh

    1
    2
    3
    4
    #!/bin/bash

    # kill processes already started
    pkill -9 dlv

本地打开调试模式

DEBUG on DevCloud

PS:这里需要注意,go run 的时候返回数据到 Postmandlv debug 的时候返回数据到 GoLand

具体流程

  1. 配置好 DeploymentRun/Debug
  2. 修改本地代码文件,手动或自动同步内容到远程
  3. 登录远程服务器,一键执行部署脚本
  4. 本地打好断点,开启调试模式

附录

GoLand Debug

  1. 开启调试模式Shift + F9
  2. 打下断点:点击 Code 左侧
  3. 查看变量:查看 Debug 面板
  4. Step OverF8
  5. Step IntoF7
  6. Step OutShift + F8
  7. 下一个断点处F9

Delve Debug

  1. 开启调试模式dlv debug main.go
  2. 打下断点break pkg.fnbreak file:line
  3. 查看变量print varargslocals
  4. Step Overnext
  5. Step Intostep
  6. Step Outstepout
  7. 下一个断点处continue

参考文献

  1. Go进阶36:Goland远程开发调试
  2. 解决在goland中通过dlv远程调试go程序后服务端无法退出

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×